package com.chenjun.designpattern.creational.prototype;

/**
 * 原型模式( ProtoType pattern)的定义： 用原型实例指定创建类的种类，并且通过拷贝这些原型创建新的对象
 * Prototype模式允许一个对象再创建另外一个可定制的对象，根本无需知道任何的创建细节
 * ，其工作原理是：通过一个原型对象传给那个要发动创建的对象，这个要发动创建的对象通过原型请求对象拷贝他们自己来实施创建
 * 
 * @author admin
 * 简单一句话概括，在JAVA中“原型模式”其实就是Obejct类里面的clone的具体应用
 * 因为java语言已经是纯面向对象了，Object类的设计思想已经和该设计模式浑然一体了
 */
public class 原型模式
{

	public static void main(String[] args)
	{
		AbstractSpoon spoon = new SoupSpoon();
		AbstractSpoon spoon2 = (AbstractSpoon)spoon.clone();
		
		System.out.println(spoon.getSpoonName());
		
		System.out.println(spoon2.getSpoonName());
		
		System.out.println(spoon == spoon2);
	}

}

abstract class AbstractSpoon implements Cloneable
{
	private String spoonName;
	
	public Object clone()
	{
		Object object = null;
		try
		{
			object = super.clone();
		}
		catch (CloneNotSupportedException e)
		{
			e.printStackTrace();
		}
		return object;
	}

	public String getSpoonName()
	{
		return spoonName;
	}

	public void setSpoonName(String spoonName)
	{
		this.spoonName = spoonName;
	}
}


//具体的实现类

class SoupSpoon extends AbstractSpoon
{
	public SoupSpoon()
	{
		setSpoonName("soup Spoon");
	}
}


